package br.com.controlador;

import br.com.modelo.Caixa;
import br.com.modelo.Grupo;
import java.io.Serializable;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import util.JPAUtil;
import util.JSFUtil;

/**
 *
 * @author gilberto.costa
 */
@ManagedBean
@ViewScoped
public class GrupoControler implements Serializable {

    private Grupo grupo;
    private List<Grupo> listGrupos = new ArrayList<Grupo>();
    private String campoBusca;
    private Boolean alterando = false;

    @PostConstruct
    public void init() {
        setGrupo(new Grupo());
        setListGrupos(Grupo.retornaGrupos());
    }

    /**
     * @return the campoBusca
     */
    public String getCampoBusca() {
        return campoBusca;
    }

    /**
     * @param campoBusca the campoBusca to set
     */
    public void setCampoBusca(String campoBusca) {
        this.campoBusca = campoBusca;
    }

    public void inicializaObj() {
        alterando = false;
        grupo = new Grupo();
    }

    public void alterar() {
        alterando = false;
    }

    public void salvar() {
        try {
            grupo.setExcluido('N');
            grupo = grupo.salvar();
            setListGrupos(Grupo.retornaGrupos());
            JSFUtil.addMessageSucesso("Grupo salvo!!");
            //retornando caixas e salvando nos caixas
            List<Caixa> caixas = CaixaControler.retornaCaixa();
            for (Caixa c : caixas) {
                Connection con = JPAUtil.conectaBanco(c.getIp());
                if (con != null) {
                    grupo = grupo.salvarCaixas(c.getIp());
                    JSFUtil.addMessageSucesso("Transferido para caixa(" + c.getNome() + ")");
                }
            }
            org.primefaces.context.RequestContext.getCurrentInstance().execute("dlgGrupo.hide();");
        } catch (Exception e) {
            JSFUtil.addMessageSucesso("Problema ao cadastrar o funcionário!!" + e);
        }
    }

    public void excluir() {
        try {
            if (!grupo.getDescricao().equalsIgnoreCase("Diversos")) {
                grupo.setExcluido('S');
                grupo = grupo.salvar();
                //retornando caixas e salvando nos caixas
                List<Caixa> caixas = CaixaControler.retornaCaixa();
                for (Caixa c : caixas) {
                    Connection con = JPAUtil.conectaBanco(c.getIp());
                    if (con != null) {
                        grupo = grupo.salvarCaixas(c.getIp());
                        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Transferido para caixa(" + c.getNome() + ")", "Mensagem"));
                    }
                }
                setListGrupos(Grupo.retornaGrupos());
                org.primefaces.context.RequestContext.getCurrentInstance().execute("dlgGrupo.hide();");
            } else {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Este grupo não pode ser excluido!!", "Mensagem"));
            }
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Erro ao excluir grupo!!" + e, "Mensagem"));
        }
    }

    public void realizaBusca() {
        listGrupos = Grupo.retornaBusca(campoBusca);
    }

    public void inicializaBusca() {
        campoBusca = new String();
    }

    /**
     * @return the listGrupos
     */
    public List<Grupo> getListGrupos() {
        return listGrupos;
    }

    /**
     * @param listGrupos the listGrupos to set
     */
    public void setListGrupos(List<Grupo> listGrupos) {
        this.listGrupos = listGrupos;
    }

    /**
     * @return the grupo
     */
    public Grupo getGrupo() {
        return grupo;
    }

    /**
     * @param grupo the grupo to set
     */
    public void setGrupo(Grupo grupo) {
        alterando = true;
        this.grupo = grupo;
    }

    public Boolean getAlterando() {
        return alterando;
    }

    public void setAlterando(Boolean alterando) {
        this.alterando = alterando;
    }
}
